﻿using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Data;
using System.Net;
using System.IO;
using System.Globalization;
using System.Web;

namespace PharmClientService
{
    class ParsingSites
    {
        private Cookie[] _cook;

        public DataTable SitePars(string site, string param, int siteid, string drugname, string cityname)
        {
            DataTable dt = new DataTable();
            string[] str;
            try
            {
                switch (siteid)
                {
                    case 1://http://www.poisklekarstv.ru
                        #region case1
                        str = Regex.Split(GET_HTTP(site, param, Encoding.Default, site), "}");
                        string tmpstr = "";
                        dt.Columns.Add("Товар");
                        dt.Columns.Add("Дата");
                        dt.Columns.Add("Цена");
                        dt.Columns.Add("количество");
                        dt.Columns.Add("Город");
                        dt.Columns.Add("Аптека");
                        dt.Columns.Add("Адрес");
                        foreach (string s in str)
                        {
                            if (s.IndexOf("\"l_name\":") > -1)
                            {
                                tmpstr = s.Replace(s.Substring(0, s.IndexOf("\"l_name\":") + 10), "");
                                tmpstr = tmpstr.Replace(tmpstr.Substring(tmpstr.IndexOf("\"manuf\":"), tmpstr.IndexOf("\"date_report\":") + 14 - tmpstr.IndexOf("\"manuf\":")), "");
                                tmpstr = tmpstr.Replace(tmpstr.Substring(tmpstr.IndexOf("\"price\":"), 8), "");
                                tmpstr = tmpstr.Replace(tmpstr.Substring(tmpstr.IndexOf("\"qty\":"), 6), "");
                                tmpstr = tmpstr.Replace(tmpstr.Substring(tmpstr.IndexOf("\"city\":"), 7), "");
                                tmpstr = tmpstr.Replace(tmpstr.Substring(tmpstr.IndexOf("\"a_name\":")), tmpstr.Substring(tmpstr.IndexOf("\"a_name\":")).Replace("(", "\",\"").Replace(")", ""));
                                tmpstr = tmpstr.Replace(tmpstr.Substring(tmpstr.IndexOf("\"price_inc_company\":"), tmpstr.IndexOf("\"a_name\":") + 9 - tmpstr.IndexOf("\"price_inc_company\":")), "");
                                if (tmpstr.IndexOf(",\"<img") > -1) tmpstr = tmpstr.Replace(tmpstr.Substring(tmpstr.IndexOf(",\"<img"), tmpstr.IndexOf(">\",") + 2 - tmpstr.IndexOf(",\"<img")), ",\"0\"");
                                tmpstr = tmpstr.Replace("\",\"", "\t").Trim().TrimEnd('"');
                                tmpstr = tmpstr.Replace(@"&quot;", "\"");
                                string[] rowsstr = Regex.Split(tmpstr, "\t");
                                string[] rowsstr_short = new string[7];
                                for (int i = 0; i < 7; i++)
                                {
                                    rowsstr_short[i] = rowsstr[i];
                                }
                                dt.Rows.Add(rowsstr_short);
                            }
                        }
                        dt.Columns.Remove("количество");
                        dt.Columns.Add("ИД сайта");

                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            dt.Rows[i]["ИД сайта"] = siteid;
                        }
                        dt.Columns["ИД сайта"].SetOrdinal(6);

                        break;
                        #endregion case1
                    case 2://http://lek.nsk.ru
                        #region case2
                        string str1 = GET(site, param, Encoding.UTF8);
                        if (str1.IndexOf("Цену уточните в аптеке") > -1)
                        {
                            str1 = str1.Substring(str1.IndexOf("Цену уточните в аптеке"), str1.Length - 1 - str1.IndexOf("Цену уточните в аптеке"));
                            str1 = str1.Replace("\t", "");
                            str1 = str1.Replace("Уточнить <br/>в аптеке", "0");
                            if (str1.IndexOf("<tbody>") > -1) str1 = str1.Substring(str1.IndexOf("<tbody>") + 7, str1.IndexOf("</tbody>") - str1.IndexOf("<tbody>") - 8);
                            str1 = str1.Replace("\n", "");
                            str1 = str1.Replace("</tr>", "</tr>\n");
                            str = Regex.Split(str1, "\n");
                            dt.Columns.Add("Аптека");
                            dt.Columns.Add("Адрес");
                            dt.Columns.Add("район");
                            dt.Columns.Add("телефон");
                            dt.Columns.Add("Дата");
                            dt.Columns.Add("Цена");
                            foreach (string s in str)
                            {
                                str1 = s;
                                while (str1.IndexOf("<") > -1)
                                {
                                    str1 = str1.Replace(str1.Substring(str1.IndexOf("<"), str1.IndexOf(">") - str1.IndexOf("<") + 1), "||||").Replace("||||||||", "||||").Trim('|').Trim().Replace("||||", "\t");
                                }
                                while (str1.IndexOf("\t\t") > -1)
                                {
                                    str1 = str1.Replace("\t\t", "\t");
                                }
                                try
                                {
                                    if (str1.Length > 0 && str1.IndexOf("var") == -1)
                                        if (str1.Substring(str1.Length - 2) != " 0")
                                            dt.Rows.Add(Regex.Split(str1, "\t"));
                                }
                                catch (Exception)
                                {
                                    //MessageBox.Show(ex.Message + "\n" + str1);
                                }
                            }
                            dt.Columns.Add("Товар");
                            dt.Columns.Add("Город");
                            dt.Columns.Add("ИД сайта");

                            for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                dt.Rows[i]["Товар"] = drugname;
                                dt.Rows[i]["Город"] = "Новосибирск";
                                dt.Rows[i]["Адрес"] = "р-н " + dt.Rows[i]["район"].ToString() + ", " + dt.Rows[i]["Адрес"].ToString() + ", тел. " + dt.Rows[i]["телефон"].ToString();
                                dt.Rows[i]["ИД сайта"] = siteid;
                            }

                            dt.Columns.Remove("телефон");
                            dt.Columns.Remove("район");
                            dt.Columns["Товар"].SetOrdinal(0);
                            dt.Columns["Дата"].SetOrdinal(1);
                            dt.Columns["Цена"].SetOrdinal(2);
                            dt.Columns["Город"].SetOrdinal(3);
                            dt.Columns["Аптека"].SetOrdinal(4);
                            dt.Columns["Адрес"].SetOrdinal(5);
                            dt.Columns["ИД сайта"].SetOrdinal(6);
                        }
                        break;
                        #endregion case2
                    case 3://http://www.009.am
                        #region case3
                        string sitestr = "";

                        sitestr = GET_HTTP(site, param, Encoding.UTF8, _cook, out _cook);

                        if (sitestr.IndexOf("Вы можете купить лекарства под заказ") > -1 && sitestr.IndexOf("<!-- конец последнего района") > -1) sitestr = sitestr.Substring(sitestr.IndexOf("Вы можете купить лекарства под заказ"), sitestr.IndexOf("<!-- конец последнего района") - sitestr.IndexOf("Вы можете купить лекарства под заказ"));
                        else
                        {
                            dt = new DataTable();
                            break;
                        }
                        if (sitestr.IndexOf("<div class=\"search_row") > -1) sitestr = sitestr.Substring(sitestr.IndexOf("<div class=\"search_row"));
                        while (sitestr.IndexOf("<div class=\"rayoncapt\">") > -1)
                        {
                            int i = sitestr.IndexOf("<div class=\"rayoncapt\">");
                            sitestr = sitestr.Replace(sitestr.Substring(i, sitestr.IndexOf("<div class=\"search_row", i) - i), "");
                        }
                        sitestr = sitestr.Replace("отложить", "");
                        while (sitestr.IndexOf(">") > -1 && sitestr.IndexOf("<") > -1)//
                        {
                            if (sitestr.IndexOf(">") - sitestr.IndexOf("<") > 0)
                                sitestr = sitestr.Replace(sitestr.Substring(sitestr.IndexOf("<"), sitestr.IndexOf(">") - sitestr.IndexOf("<") + 1), "||||").Replace("\t", "").Replace("\n", "");
                        }
                        sitestr = sitestr.Replace("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||", "\n");
                        while (sitestr.IndexOf("||") > -1)
                            sitestr = sitestr.Replace("||", "|");
                        str = Regex.Split(sitestr, "\n");
                        dt.Columns.Add("Товар");
                        dt.Columns.Add("производитель");
                        dt.Columns.Add("Аптека");
                        dt.Columns.Add("Адрес");
                        dt.Columns.Add("Цена");
                        foreach (string ss in str)
                        {
                            string s = ss.Trim('|');
                            while (s.IndexOf(" |") > -1) s = s.Replace(" |", "|");
                            while (s.IndexOf("| ") > -1) s = s.Replace("| ", "|");
                            int i = 0;
                            for (int j = 0; j < 4; j++) i = s.IndexOf('|', i + 1);
                            s = s.Substring(i + 1);
                            s = s.Replace("|", "\t");
                            try
                            {
                                dt.Rows.Add(Regex.Split(s, "\t"));
                            }
                            catch (Exception)
                            {
                                //MessageBox.Show(Regex.Split(s, "\t").Length.ToString());
                            }
                        }
                        dt.Columns.Remove("производитель");
                        dt.Columns.Add("Город");
                        dt.Columns.Add("Дата");
                        dt.Columns.Add("ИД сайта");
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            dt.Rows[i]["Город"] = cityname;
                            dt.Rows[i]["Дата"] = DateTime.Today.ToString("yyyy-MM-dd");
                            dt.Rows[i]["ИД сайта"] = siteid;
                        }

                        dt.Columns["Товар"].SetOrdinal(0);
                        dt.Columns["Дата"].SetOrdinal(1);
                        dt.Columns["Цена"].SetOrdinal(2);
                        dt.Columns["Город"].SetOrdinal(3);
                        dt.Columns["Аптека"].SetOrdinal(4);
                        dt.Columns["Адрес"].SetOrdinal(5);
                        dt.Columns["ИД сайта"].SetOrdinal(6);
                        break;
                        #endregion case3
                    case 4://максавит//http://vps-1019641.srv.pa.infobox.ru/search.php
                        #region case4
                        string site_str = GET(site, param.Replace(Uri.EscapeDataString(drugname), Uri.EscapeDataString(Uri.EscapeDataString(drugname))), Encoding.UTF8);
                        site_str = site_str.Replace(site_str.Substring(0, site_str.IndexOf(":[{") + 3), "").Replace("}]});", "");
                        site_str = DecodeEncodedNonAsciiCharacters(site_str);
                        string[] fdfd = Regex.Split(site_str, "},{");
                        string s1 = "";

                        dt.Columns.Add("Товар");
                        dt.Columns.Add("Цена");
                        //dt.Columns.Add("Колич");
                        dt.Columns.Add("Город");
                        dt.Columns.Add("Адрес");
                        dt.Columns.Add("Аптека");
                        dt.Columns.Add("Дата");
                        dt.Columns.Add("ИД сайта");

                        for (int i = 0; i < fdfd.Length; i++)
                        {
                            s1 = fdfd[i];
                            object[] row = Regex.Split((s1.Substring(s1.IndexOf("\"name\":") + 8, s1.IndexOf("\"manuf\":") - 2 - (s1.IndexOf("\"name\":") + 8)) + "\t"
                                + s1.Substring(s1.IndexOf("\"price\":") + 9, s1.IndexOf("\"quantity\":") - 2 - (s1.IndexOf("\"price\":") + 9)) + "\t"
                                //+ s1.Substring(s1.IndexOf("\"quantity\":") + 11, s1.IndexOf("\"delivery\":") - 1 - (s1.IndexOf("\"quantity\":") + 11)) + "\t"
                                + s1.Substring(s1.IndexOf("\"cname\":") + 9, s1.IndexOf("\"addr\":") - 2 - (s1.IndexOf("\"cname\":") + 9)) + "\t"
                                + s1.Substring(s1.IndexOf("\">", s1.IndexOf("\"addr\":")) + 2, s1.IndexOf(@"/a>", s1.IndexOf("\"addr\":")) - 2 - (s1.IndexOf("\">", s1.IndexOf("\"addr\":")) + 2))).Replace(@"\/", @"/").Replace(@"\", "").Replace("Аптека \"Максавит\",", "") + "\t"
                                + "Максавит\t"
                                + DateTime.Today.ToString("yyyy-MM-dd") + "\t"
                                + siteid.ToString()
                                , "\t");

                            dt.Rows.Add(row);
                        }
                        dt.Columns["Товар"].SetOrdinal(0);
                        dt.Columns["Дата"].SetOrdinal(1);
                        dt.Columns["Цена"].SetOrdinal(2);
                        dt.Columns["Город"].SetOrdinal(3);
                        dt.Columns["Аптека"].SetOrdinal(4);
                        dt.Columns["Адрес"].SetOrdinal(5);
                        dt.Columns["ИД сайта"].SetOrdinal(6);
                        break;
                        #endregion case4
                    case 6://analit.net//http://www.analit.net/apteka/Main/FindInPharmacy?filter.catalogProducts%5b0%5d=1346&filter.region=1099511627776&filter.query=АНАЛЬГИН-УЛЬТРА
                        #region case6
                        string REQUEST_str = GET(site, param, Encoding.UTF8);
                        //-----------------------------
                        // ВЫБИРАЕМ ПОДСТРОКУ МЕЖДУ ("<table class=\"drug_result" И "</html>")
                        if (REQUEST_str.IndexOf("<table class=\"drug_result") > -1 && REQUEST_str.IndexOf("</html>") > -1)
                            REQUEST_str = REQUEST_str.Substring(REQUEST_str.IndexOf("<table class=\"drug_result"), REQUEST_str.IndexOf("</html>") - REQUEST_str.IndexOf("<table class=\"drug_result"));
                        else //чтобы мусор не попадал, в строки данных, если запрос ответил, а данных не вернул
                        {
                            dt = new DataTable();
                            break;
                        }
                        //END "STAGE 1"
                        //-----------------------------
                        // ВЫБИРАЕМ ПОДСТРОКУ МЕЖДУ ("<tr class="whitetr" И "<td colspan=8>")
                        if (REQUEST_str.IndexOf("<tr class=\"whitetr") > -1 && REQUEST_str.IndexOf("<td colspan=8>") > -1)
                            REQUEST_str = REQUEST_str.Substring(REQUEST_str.IndexOf("<tr class=\"whitetr"), REQUEST_str.IndexOf("<td colspan=8>") - REQUEST_str.IndexOf("<tr class=\"whitetr"));
                        //END "STAGE 2"
                        //-----------------------------
                        //ЗАШИТА ОТ ПУСТОТ
                        REQUEST_str = REQUEST_str.Replace("<td></td>", "<td>NULL</td>");
                        //-----------------------------
                        // ЗАМЕНИТЬ СОДЕРЖИМОЕ ВСЕХ КОНТЕЙНЕРОВ НА "||||" (КОНТЕЙНЕР ОТКРЫЛСЯ = "<", КОНТЕЙНЕР ЗАКРЫЛСЯ = ">")
                        // ЗАМЕНИТЬ ВСЕ "СИМВОЛЫ ПЕРЕВОДА СТРОКИ"("\r") НА "ПУСТО"("")
                        while (REQUEST_str.IndexOf(">") > -1 && REQUEST_str.IndexOf("<") > -1)//
                        {
                            if (REQUEST_str.IndexOf(">") - REQUEST_str.IndexOf("<") > 0)
                                REQUEST_str = REQUEST_str.Replace(REQUEST_str.Substring(REQUEST_str.IndexOf("<"), REQUEST_str.IndexOf(">") - REQUEST_str.IndexOf("<") + 1), "||||").Replace("\t", "").Replace("\n", "").Replace("\r", "|");
                        }
                        //END "STAGE 3"
                        //-----------------------------
                        // ЗАМЕНИТЬ "|||||||||||||||||||||||||||" НА "СИМВОЛ ПЕРЕВОДА СТРОКИ"("\n")
                        // ЗАМЕНИТЬ ВСЕ ВХОЖДЕНИЯ "||" НА "|"
                        REQUEST_str = REQUEST_str.Replace("|||||||||||||||||||||||||||", "\n");
                        while (REQUEST_str.IndexOf("||") > -1)
                            REQUEST_str = REQUEST_str.Replace("||", "|");
                        //END "STAGE 4"
                        //-----------------------------
                        // СОЗДАЕМ МАССИВ СТРОК ПО ПРИНЦИПУ "\n"
                        str = Regex.Split(REQUEST_str, "\n");

                        //END "STAGE 5"
                        //-----------------------------
                        //ДОБАВЛЯЕМ СТОЛБЦЫ В ПЕРЕМЕННУЮ ТАБЛИЦЫ
                        dt.Columns.Add("Аптека");
                        dt.Columns.Add("район");
                        dt.Columns.Add("Товар");
                        dt.Columns.Add("производитель");
                        dt.Columns.Add("Цена");
                        dt.Columns.Add("Адрес");
                        dt.Columns.Add("телефон");

                        //ПОСИМВОЛЬНАЯ ОБРАБОТКА КАЖДОЙ СТРОКИ МАССИВА(ДОБАВЛЯЕМ СТОЛБЦЫ ПО ПРИНЦИПУ "\t" (s.Replace("|", "\t")) )
                        foreach (string ss in str)
                        {
                            string s = ss.Trim('|');
                            while (s.IndexOf(" |") > -1) s = s.Replace(" |", "|");
                            while (s.IndexOf("| ") > -1) s = s.Replace("| ", "|");
                            int i = 0;
                            for (int j = 0; j < 7; j++)
                            {
                                i = s.IndexOf("|", i + 1);

                                //ЗАМЕНЯЕТ ГРЕБАННЫЕ "," НА "." ДЛЯ ЦЕНЫ
                                if (j == 4)
                                {
                                    s = s.Replace(",", ".");
                                }
                            }

                            s = s.Substring(i + 1);
                            s = s.Replace("|", "\t");
                            try
                            {
                                dt.Rows.Add(Regex.Split(s, "\t"));
                            }
                            catch (Exception)
                            {
                                //MessageBox.Show(Regex.Split(s, "\t").Length.ToString());
                            }
                        }
                        //УДАЛЯЕМ НЕНУЖНЫЕ СТОЛБЦЫ, ДОБАВЛЯЕМ НУЖНЫЕ
                        dt.Columns.Remove("Товар");             //*  удаляем оригинал
                        dt.Columns.Remove("район");
                        dt.Columns.Remove("производитель");
                        dt.Columns.Remove("телефон");
                        dt.Columns.Add("Город");
                        dt.Columns.Add("Дата");
                        dt.Columns.Add("ИД сайта");
                        dt.Columns.Add("Товар");                //* добавляем псевдотовар(цифры каталога)

                        //ДЛЯ КАЖДОГО КАРТЕЖА ПРИСВАИВАЕМ ЗНАЧЕНИЕ СТОЛБЦОВ
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            dt.Rows[i]["Город"] = cityname;
                            dt.Rows[i]["Дата"] = DateTime.Today.ToString("yyyy-MM-dd");
                            dt.Rows[i]["ИД сайта"] = siteid;
                            //dt.Rows[i]["Товар"] = param.Substring(30, param.IndexOf("&filter.region=") - 30); //filter.catalogProducts%5b0%5d=765&filter.region=2199027655552&filter.CurrentPage=0
                            dt.Rows[i]["Товар"] = param.Substring(param.IndexOf("&filter.catalogProducts%5b0%5d=") + 31, param.Length - param.IndexOf("&filter.catalogProducts%5b0%5d=") - 31); //filter.CurrentPage=0&filter.region=1099511627776&filter.catalogProducts%5b0%5d=69875
                        }

                        //СОРТИРУЕМ КОЛОНКИ
                        dt.Columns["Товар"].SetOrdinal(0);
                        dt.Columns["Дата"].SetOrdinal(1);
                        dt.Columns["Цена"].SetOrdinal(2);
                        dt.Columns["Город"].SetOrdinal(3);
                        dt.Columns["Аптека"].SetOrdinal(4);
                        dt.Columns["Адрес"].SetOrdinal(5);
                        dt.Columns["ИД сайта"].SetOrdinal(6);

                        break;
                        #endregion case6
                    case 7://irk.vapteke.ru//http://irk.vapteke.ru/ajax/SubCatalog/?ID=491&search=%D0%90%D0%BD%D0%B0%D0%BB%D1%8C%D0%B3%D0%B8%D0%BD&AptID=net220
                        #region case7
                        string REQUEST_str7 = GET(site, param, Encoding.UTF8);
                        //-----------------------------
                        //-----------------------------
                        // Если результат пуст - выходим из обработки
                        if (REQUEST_str7.IndexOf("Нет позиций") > 0)
                        {
                            dt = new DataTable();
                            break;
                        }
                        //-----------------------------
                        // ВЫБРАТЬ ПОДСТРОКУ НАЧИНАЮЩУЮСЯ НА "<td width='71' class='img' >" И ЗАКАНЧИИВАЮЩУЮСЯ НА "</table><br />"
                        REQUEST_str7 = REQUEST_str7.Substring(REQUEST_str7.IndexOf("<td width='71' class='img' >"), REQUEST_str7.IndexOf("</table><br />") - REQUEST_str7.IndexOf("<td width='71' class='img' >"));
                        //END "STAGE 1"
                        //-----------------------------
                        // ЗАШИТА ОТ ПУСТОТ
                        REQUEST_str7 = REQUEST_str7.Replace("<img src=''http://irk.vapteke.ru/templates/search/img/deliveryIcon.jpg'' width=''25'' height=''14'' onclick=''Order('delivery', 223, 13432, '240.00', event);'' class=''hand'' title=''Доставка'' />", "");
                        REQUEST_str7 = REQUEST_str7.Replace("<img src=''http://irk.vapteke.ru/templates/search/img/24Icon.png'' width=''21'' height=''17'' class=''hand'' title=''Круглосуточно'' />", "");

                        // ЗАМЕНИТЬ СОДЕРЖИМОЕ ВСЕХ КОНТЕЙНЕРОВ НА "||||" (КОНТЕЙНЕР ОТКРЫЛСЯ = "<", КОНТЕЙНЕР ЗАКРЫЛСЯ = ">")
                        // ЗАМЕНИТЬ ВСЕ "СИМВОЛЫ ПЕРЕВОДА СТРОКИ"("\r") НА "ПУСТО"("")
                        while (REQUEST_str7.IndexOf(">") > -1 && REQUEST_str7.IndexOf("<") > -1)//
                        {
                            if (REQUEST_str7.IndexOf(">") - REQUEST_str7.IndexOf("<") > 0)
                                REQUEST_str7 = REQUEST_str7.Replace(REQUEST_str7.Substring(REQUEST_str7.IndexOf("<"), REQUEST_str7.IndexOf(">") - REQUEST_str7.IndexOf("<") + 1), "||||").Replace("\t", "|").Replace("\n", "|").Replace("\r", "|");
                        }
                        //END "STAGE 2"
                        //-----------------------------
                        // ЗАМЕНИТЬ "||||||||||||||||||||||||||||||||||||||||  " НА "СИМВОЛ ПЕРЕВОДА СТРОКИ"("\n")
                        // ЗАМЕНИТЬ ВСЕ ВХОЖДЕНИЯ "||" НА "|"
                        REQUEST_str7 = REQUEST_str7.Replace("||||||||||||||||||||||||||||||||||||||||  ", "\n");
                        REQUEST_str7 = REQUEST_str7.Replace("|||||||||||||||||||||||||||||||||||||||||||", "");
                        REQUEST_str7 = REQUEST_str7.Replace("Данные от: ", "");

                        while (REQUEST_str7.IndexOf("||") > -1)
                            REQUEST_str7 = REQUEST_str7.Replace("||", "|");

                        // ЗАШИТА ОТ ПУСТОТ
                        REQUEST_str7 = REQUEST_str7.Replace("|&nbsp;|  ", "");
                        //END "STAGE 3"
                        //-----------------------------
                        // СОЗДАЕМ МАССИВ СТРОК ПО ПРИНЦИПУ "\n"
                        str = Regex.Split(REQUEST_str7, "\n");
                        //END "STAGE 4"
                        //-----------------------------
                        //ДОБАВЛЯЕМ СТОЛБЦЫ В ПЕРЕМЕННУЮ ТАБЛИЦЫ
                        dt.Columns.Add("Товар");
                        dt.Columns.Add("Дата");
                        dt.Columns.Add("Цена");
                        dt.Columns.Add("Аптека");
                        dt.Columns.Add("Адрес");

                        //ПОСИМВОЛЬНАЯ ОБРАБОТКА КАЖДОЙ СТРОКИ МАССИВА(ДОБАВЛЯЕМ СТОЛБЦЫ ПО ПРИНЦИПУ "\t")
                        foreach (string ss in str)
                        {
                            string s = ss.Trim('|');
                            while (s.IndexOf(" |") > -1) s = s.Replace(" |", "|");
                            while (s.IndexOf("| ") > -1) s = s.Replace("| ", "|");
                            int i = 0;
                            for (int j = 0; j < 5; j++)
                            {
                                i = s.IndexOf("|", i + 1);

                                //ЗАМЕНЯЕТ ГРЕБАННЫЕ " р." НА "" ДЛЯ ЦЕНЫ
                                if (j == 2)
                                {
                                    s = s.Replace(" р.", "");
                                }
                            }

                            s = s.Substring(i + 1);
                            s = s.Replace("|", "\t");
                            try
                            {
                                dt.Rows.Add(Regex.Split(s, "\t"));
                            }
                            catch (Exception)
                            {
                                //MessageBox.Show(Regex.Split(s, "\t").Length.ToString());
                            }

                        }
                        //УДАЛЯЕМ НЕНУЖНЫЕ СТОЛБЦЫ, ДОБАВЛЯЕМ ЕЩЕ СТОЛБЦЫ
                        dt.Columns.Remove("Товар");             //* удаляем оригинал
                        dt.Columns.Add("Город");
                        dt.Columns.Add("ИД сайта");
                        dt.Columns.Add("Товар");                //* добавляем псевдотовар(цифры каталога)

                        //ДЛЯ КАЖДОГО КАРТЕЖА ПРИСВАИВАЕМ ЗНАЧЕНИЕ СТОЛБЦОВ
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            dt.Rows[i]["Город"] = "Иркутск";//cityname;
                            dt.Rows[i]["ИД сайта"] = siteid;
                            //dt.Rows[i]["Товар"] = param.Substring(3, param.Length - param.IndexOf("&AptID=") - 9 - 3); //ID=13432&AptID=&search=""
                            dt.Rows[i]["Товар"] = param.Substring(param.IndexOf("&ID=") + 4, param.Length - param.IndexOf("&ID=") - 4); //AptID=net220&search=""&ID=***
                        }

                        //СОРТИРУЕМ КОЛОНКИ
                        dt.Columns["Товар"].SetOrdinal(0);
                        dt.Columns["Дата"].SetOrdinal(1);
                        dt.Columns["Цена"].SetOrdinal(2);
                        dt.Columns["Город"].SetOrdinal(3);
                        dt.Columns["Аптека"].SetOrdinal(4);
                        dt.Columns["Адрес"].SetOrdinal(5);
                        dt.Columns["ИД сайта"].SetOrdinal(6);

                        break;
                        #endregion case7
                    case 9://nsk.vapteke.ru//http://nsk.vapteke.ru/ajax/SubCatalog/?ID=491&search=%D0%90%D0%BD%D0%B0%D0%BB%D1%8C%D0%B3%D0%B8%D0%BD&AptID=net220
                        #region case9
                        string REQUEST_str9 = GET(site, param, Encoding.UTF8);
                        //-----------------------------
                        //-----------------------------
                        // Если результат пуст - выходим из обработки
                        if (REQUEST_str9.IndexOf("Нет позиций") > 0)
                        {
                            dt = new DataTable();
                            break;
                        }
                        //-----------------------------
                        // ВЫБРАТЬ ПОДСТРОКУ НАЧИНАЮЩУЮСЯ НА "<td width='71' class='img' >" И ЗАКАНЧИИВАЮЩУЮСЯ НА "</table><br />"
                        REQUEST_str9 = REQUEST_str9.Substring(REQUEST_str9.IndexOf("<td width='71' class='img' >"), REQUEST_str9.IndexOf("</table><br />") - REQUEST_str9.IndexOf("<td width='71' class='img' >"));
                        //END "STAGE 1"
                        //-----------------------------
                        // ЗАШИТА ОТ ПУСТОТ
                        REQUEST_str9 = REQUEST_str9.Replace("<img src=''http://irk.vapteke.ru/templates/search/img/deliveryIcon.jpg'' width=''25'' height=''14'' onclick=''Order('delivery', 223, 13432, '240.00', event);'' class=''hand'' title=''Доставка'' />", "");
                        REQUEST_str9 = REQUEST_str9.Replace("<img src=''http://irk.vapteke.ru/templates/search/img/24Icon.png'' width=''21'' height=''17'' class=''hand'' title=''Круглосуточно'' />", "");

                        // ЗАМЕНИТЬ СОДЕРЖИМОЕ ВСЕХ КОНТЕЙНЕРОВ НА "||||" (КОНТЕЙНЕР ОТКРЫЛСЯ = "<", КОНТЕЙНЕР ЗАКРЫЛСЯ = ">")
                        // ЗАМЕНИТЬ ВСЕ "СИМВОЛЫ ПЕРЕВОДА СТРОКИ"("\r") НА "ПУСТО"("")
                        while (REQUEST_str9.IndexOf(">") > -1 && REQUEST_str9.IndexOf("<") > -1)//
                        {
                            if (REQUEST_str9.IndexOf(">") - REQUEST_str9.IndexOf("<") > 0)
                                REQUEST_str9 = REQUEST_str9.Replace(REQUEST_str9.Substring(REQUEST_str9.IndexOf("<"), REQUEST_str9.IndexOf(">") - REQUEST_str9.IndexOf("<") + 1), "||||").Replace("\t", "|").Replace("\n", "|").Replace("\r", "|");
                        }
                        //END "STAGE 2"
                        //-----------------------------
                        // ЗАМЕНИТЬ "||||||||||||||||||||||||||||||||||||||||  " НА "СИМВОЛ ПЕРЕВОДА СТРОКИ"("\n")
                        // ЗАМЕНИТЬ ВСЕ ВХОЖДЕНИЯ "||" НА "|"
                        REQUEST_str9 = REQUEST_str9.Replace("||||||||||||||||||||||||||||||||||||||||  ", "\n");
                        REQUEST_str9 = REQUEST_str9.Replace("|||||||||||||||||||||||||||||||||||||||||||", "");
                        REQUEST_str9 = REQUEST_str9.Replace("Данные от: ", "");

                        while (REQUEST_str9.IndexOf("||") > -1)
                            REQUEST_str9 = REQUEST_str9.Replace("||", "|");

                        // ЗАШИТА ОТ ПУСТОТ
                        REQUEST_str9 = REQUEST_str9.Replace("|&nbsp;|  ", "");
                        //END "STAGE 3"
                        //-----------------------------
                        // СОЗДАЕМ МАССИВ СТРОК ПО ПРИНЦИПУ "\n"
                        str = Regex.Split(REQUEST_str9, "\n");
                        //END "STAGE 4"
                        //-----------------------------
                        //ДОБАВЛЯЕМ СТОЛБЦЫ В ПЕРЕМЕННУЮ ТАБЛИЦЫ
                        dt.Columns.Add("Товар");
                        dt.Columns.Add("Дата");
                        dt.Columns.Add("Цена");
                        dt.Columns.Add("Аптека");
                        dt.Columns.Add("Адрес");

                        //ПОСИМВОЛЬНАЯ ОБРАБОТКА КАЖДОЙ СТРОКИ МАССИВА(ДОБАВЛЯЕМ СТОЛБЦЫ ПО ПРИНЦИПУ "\t")
                        foreach (string ss in str)
                        {
                            string s = ss.Trim('|');
                            while (s.IndexOf(" |") > -1) s = s.Replace(" |", "|");
                            while (s.IndexOf("| ") > -1) s = s.Replace("| ", "|");
                            int i = 0;
                            for (int j = 0; j < 5; j++)
                            {
                                i = s.IndexOf("|", i + 1);

                                //ЗАМЕНЯЕТ ГРЕБАННЫЕ " р." НА "" ДЛЯ ЦЕНЫ
                                if (j == 2)
                                {
                                    s = s.Replace(" р.", "");
                                }
                            }

                            s = s.Substring(i + 1);
                            s = s.Replace("|", "\t");
                            try
                            {
                                dt.Rows.Add(Regex.Split(s, "\t"));
                            }
                            catch (Exception)
                            {
                                //MessageBox.Show(Regex.Split(s, "\t").Length.ToString());
                            }

                        }
                        //УДАЛЯЕМ НЕНУЖНЫЕ СТОЛБЦЫ, ДОБАВЛЯЕМ ЕЩЕ СТОЛБЦЫ
                        dt.Columns.Remove("Товар");             //*  удаляем оригинал
                        dt.Columns.Add("Город");
                        dt.Columns.Add("ИД сайта");
                        dt.Columns.Add("Товар");                //* добавляем псевдотовар(цифры каталога)

                        //ДЛЯ КАЖДОГО КАРТЕЖА ПРИСВАИВАЕМ ЗНАЧЕНИЕ СТОЛБЦОВ
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            dt.Rows[i]["Город"] = "Новосибирск";//cityname;
                            dt.Rows[i]["ИД сайта"] = siteid;
                            //dt.Rows[i]["Товар"] = param.Substring(3, param.Length - param.IndexOf("&AptID=") - 9 - 3); //ID=13432&AptID=&search=""
                            dt.Rows[i]["Товар"] = param.Substring(param.IndexOf("&ID=") + 4, param.Length - param.IndexOf("&ID=") - 4); //AptID=net220&search=""&ID=***
                        }

                        //СОРТИРУЕМ КОЛОНКИ
                        dt.Columns["Товар"].SetOrdinal(0);
                        dt.Columns["Дата"].SetOrdinal(1);
                        dt.Columns["Цена"].SetOrdinal(2);
                        dt.Columns["Город"].SetOrdinal(3);
                        dt.Columns["Аптека"].SetOrdinal(4);
                        dt.Columns["Адрес"].SetOrdinal(5);
                        dt.Columns["ИД сайта"].SetOrdinal(6);

                        break;
                        #endregion case9

                    case 10:////
                        #region case10
                        dt.Columns.Add("Аптека");
                        dt.Columns.Add("Адрес");
                        dt.Columns.Add("Цена");
                        dt.Columns.Add("Дата");
                        dt.Columns.Add("Товар");
                        dt.Columns.Add("Город");
                        dt.Columns.Add("ИД сайта");
                        param = param.Replace(System.Uri.EscapeDataString(drugname), HttpUtility.UrlEncode(drugname.Replace(@"/", " "), Encoding.GetEncoding(1251)));
                        string res = GET(site, param, Encoding.GetEncoding(1251));
                        int c1 = res.IndexOf(">", res.IndexOf(@"<span>Ваш город:</span>") + "<span>Ваш город:</span>".Length) + 1;
                        int c2 = res.IndexOf("</a>", c1);
                        cityname = res.Substring(c1, c2 - c1);
                        int stpos = res.IndexOf(">" + drugname + "<");
                        res = res.Substring(stpos, res.IndexOf("</li>", stpos) - stpos);

                        string[] rows = Regex.Split(res, "</tr>");
                        for (int i = 1; i < rows.Length; i++)
                        {
                            string s = rows[i];
                            if (s.IndexOf("Уточните цену в аптеке") == -1)
                            {
                                try
                                {
                                    int ph1 = s.IndexOf("</noscript>") + "</noscript>".Length;
                                    int ph2 = s.IndexOf("<noscript>", ph1);
                                    int ad1 = s.IndexOf("<p class='other'>") + "<p class='other'>".Length;
                                    int ad2 = s.IndexOf("</p>", ad1);
                                    int pr1 = s.IndexOf("<b>") + "<b>".Length;
                                    int pr2 = s.IndexOf("</b>", pr1);
                                    int dt1 = s.IndexOf(">", s.IndexOf("<p class", pr2)) + 1;
                                    int dt2 = s.IndexOf("</p>", dt1);
                                    object[] row = new object[7] 
                                    {
                                        s.Substring(ph1, ph2 - ph1).Trim(),
                                        s.Substring(ad1, ad2 - ad1).Trim(),
                                        s.Substring(pr1, pr2 - pr1).Trim().Replace(" руб.","").Replace(".",","),
                                        s.Substring(dt1, dt2 - dt1).Trim().Replace("сегодня",DateTime.Now.ToString("dd.MM.yyyy")).Replace("вчера",DateTime.Now.AddDays(-1).ToString("dd.MM.yyyy")),
                                        drugname,
                                        cityname,
                                        siteid
                                    };
                                    dt.Rows.Add(row);
                                }
                                catch (Exception)
                                {
                                }
                            }
                        }

                        dt.Columns["Товар"].SetOrdinal(0);
                        dt.Columns["Дата"].SetOrdinal(1);
                        dt.Columns["Цена"].SetOrdinal(2);
                        dt.Columns["Город"].SetOrdinal(3);
                        dt.Columns["Аптека"].SetOrdinal(4);
                        dt.Columns["Адрес"].SetOrdinal(5);
                        dt.Columns["ИД сайта"].SetOrdinal(6);

                        break;
                        #endregion case10

                    case 11:
                        #region case11

                        string pharm = "";
                        dt.Columns.Add("Аптека");
                        dt.Columns.Add("Адрес");
                        dt.Columns.Add("Цена");
                        dt.Columns.Add("Дата");
                        dt.Columns.Add("Товар");
                        dt.Columns.Add("Город");
                        dt.Columns.Add("ИД сайта");
                        try
                        {
                            string city = param.Substring(param.IndexOf("city="));
                            if (city.IndexOf("&") > -1) city = city.Replace(city.Substring(city.IndexOf("&", city.IndexOf("city="))), "");
                            site = site.Replace(@"http://", @"http://" + city.Substring(city.IndexOf("city=") + 5) + ".");
                            param = param.Replace(city, "").Trim('&');
                            string ressite = GET_HTTP_UA(site, param, Encoding.UTF8);
                            string st_phrase = "Результат поиска по запросу";
                            int st_pos = ressite.IndexOf(st_phrase);
                            int count_page = 1;
                            if (st_pos > -1)
                            {
                                string count_page_str = "страниц &#151; <b>";
                                int count_page_st_pos = ressite.IndexOf(count_page_str, st_pos) + count_page_str.Length;
                                if (ressite.IndexOf(count_page_str, st_pos) > -1)
                                    count_page = Convert.ToInt32(ressite.Substring(count_page_st_pos, ressite.IndexOf("</b>", count_page_st_pos) - count_page_st_pos));
                                for (int i = 1; i < count_page + 1; i++)
                                {
                                    if (i > 1) ressite = GET_HTTP_UA(site, param + "&page=" + i.ToString(), Encoding.UTF8);
                                    st_pos = ressite.IndexOf(st_phrase);
                                    string tbl = ressite.Substring(ressite.IndexOf("<table", st_pos), ressite.IndexOf("</table>", st_pos) - ressite.IndexOf("<table", st_pos));
                                    string[] rows1 = Regex.Split(tbl, "</tr>");
                                    for (int j = 1; j < rows1.Length; j++)
                                    {
                                        if (rows1[j].IndexOf(">" + drugname + "<") > -1 && rows1[j].IndexOf(pharm) > -1)
                                        {
                                            int newparam_st_pos = rows1[j].IndexOf("<a href=\"") + "<a href=\"".Length;
                                            string newparam = rows1[j].Substring(newparam_st_pos, rows1[j].IndexOf("\">", newparam_st_pos) - newparam_st_pos);
                                            string new_site = site.Replace(site.Substring(site.IndexOf("/", @"http://".Length + 2)), newparam.Substring(0, newparam.IndexOf("?")));
                                            string new_par = newparam.Substring(newparam.IndexOf("?") + 1);
                                            string newres = GET_HTTP_UA(new_site, new_par, Encoding.UTF8);

                                            int price_st_pos = newres.IndexOf("<b>цена:</b>", newres.IndexOf(">" + drugname + "<")) + "<b>цена:</b>".Length;
                                            int date_st_pos = newres.IndexOf("Дата обновления цены:&#160;", price_st_pos) + "Дата обновления цены:&#160;".Length;
                                            int pharm_st_pos = newres.IndexOf("<br/>", newres.IndexOf("<a href=\"/apteka", date_st_pos)) + "<br/>".Length;
                                            int phweb_st_pos = newres.IndexOf(">", newres.IndexOf("<a href=\"/apteka", date_st_pos)) + ">".Length;
                                            string adds = newres.Substring(pharm_st_pos, newres.IndexOf("&#150;", pharm_st_pos) - pharm_st_pos).Trim();
                                            object[] row = new object[7] 
                                            {
                                                newres.Substring(phweb_st_pos, newres.IndexOf("<", phweb_st_pos) - phweb_st_pos).Trim() + " (сайт apteki.su)",
                                                adds.Substring(adds.IndexOf(",") + 1).Trim(),
                                                newres.Substring(price_st_pos, newres.IndexOf("&", price_st_pos) - price_st_pos).Trim(),
                                                Convert.ToDateTime(newres.Substring(date_st_pos, newres.IndexOf(".", date_st_pos) - date_st_pos).Trim()).Date.ToString("dd.MM.yyyy"),
                                                drugname,
                                                adds.Substring(0,adds.IndexOf(",")).Trim(),
                                                siteid
                                            };
                                            dt.Rows.Add(row);
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception)
                        {
                        }
                        dt.Columns["Товар"].SetOrdinal(0);
                        dt.Columns["Дата"].SetOrdinal(1);
                        dt.Columns["Цена"].SetOrdinal(2);
                        dt.Columns["Город"].SetOrdinal(3);
                        dt.Columns["Аптека"].SetOrdinal(4);
                        dt.Columns["Адрес"].SetOrdinal(5);
                        dt.Columns["ИД сайта"].SetOrdinal(6);

                        break;
                        #endregion case11

                    case 12:
                        #region case12

                        dt.Columns.Add("Аптека");
                        dt.Columns.Add("Адрес");
                        dt.Columns.Add("Цена");
                        dt.Columns.Add("Дата");
                        dt.Columns.Add("Товар");
                        dt.Columns.Add("Город");
                        dt.Columns.Add("ИД сайта");

                        try
                        {
                            string resp = POST(site, param);
                            int res_tbl = resp.IndexOf("<table class=\"search_table\"");
                            if (res_tbl > -1)
                            {
                                resp = resp.Substring(res_tbl, resp.IndexOf("/table>", res_tbl) - res_tbl);
                                string[] rows_m = Regex.Split(resp, "</tr>");
                                foreach (string row in rows_m)
                                {
                                    int drug = row.IndexOf(drugname);
                                    if (drug > -1)
                                    {
                                        int ph = row.IndexOf(">", row.IndexOf("<a ")) + 1;
                                        int adds = row.IndexOf("</a><br/>", ph) + "</a><br/>".Length;
                                        int price = row.IndexOf("td_drug_price\">") + "td_drug_price\">".Length;
                                        int date = row.IndexOf("td_create_date\">") + "td_create_date\">".Length;
                                        string adds_city = row.Substring(adds, row.IndexOf("<br/>", adds) - adds);
                                        object[] r = new object[7]
                                        {
                                            row.Substring(ph,row.IndexOf("</a>",ph) - ph),
                                            adds_city.Substring(adds_city.IndexOf(",") + 1).Trim(),
                                            row.Substring(price,row.IndexOf("<",price) - price),
                                            Convert.ToDateTime(row.Substring(date,row.IndexOf("<",date) - date)).Date.ToString("dd.MM.yyyy"),
                                            drugname,
                                            adds_city.Substring(0,adds_city.IndexOf(",")).Replace("г.","").Replace("Г.","").Trim(),
                                            siteid
                                        };
                                        dt.Rows.Add(r);
                                    }
                                }
                            }
                        }
                        catch (Exception)
                        {
                        }

                        dt.Columns["Товар"].SetOrdinal(0);
                        dt.Columns["Дата"].SetOrdinal(1);
                        dt.Columns["Цена"].SetOrdinal(2);
                        dt.Columns["Город"].SetOrdinal(3);
                        dt.Columns["Аптека"].SetOrdinal(4);
                        dt.Columns["Адрес"].SetOrdinal(5);
                        dt.Columns["ИД сайта"].SetOrdinal(6);
                        break;
                        #endregion case12
                    case 13://farmani.ru//http://farmani.ru/catalog/lekarstvennye-sredstva/abaktal-tbl-p-o-400mg-10/
                        #region case13
                        //MessageBox.Show(param);
                        //string REQUEST_str13 = GET_0("http://farmani.ru/catalog/lekarstvennye-sredstva/abaktal-tbl-p-o-400mg-10/", Encoding.UTF8);        "/" в конце обязательна!!!
                        string REQUEST_str13 = GET_1(site, param, Encoding.UTF8);     //типо параметр имени таблетки! тут мы получаем набор параметров вида: "name=lekarstvennye-sredstva/abaktal-tbl-p-o-400mg-10/" и преобразовываем строковый параметр в вид: site+param(-"name=") (http://farmani.ru/catalog/lekarstvennye-sredstva/abaktal-tbl-p-o-400mg-10/) т.к. набор параметров, то и будет набор адресов!
                        //string REQUEST_str13 = GET(site, Encoding.UTF8);
                        // ВЫБИРАЕМ ПОДСТРОКУ МЕЖДУ ("group.add(createPlacemark(new YMaps.GeoPoint(" И "map.addOverlay(group);")
                        if (REQUEST_str13.IndexOf("group.add(createPlacemark(new YMaps.GeoPoint(") > -1 && REQUEST_str13.IndexOf("map.addOverlay(group);") > -1)
                            REQUEST_str13 = REQUEST_str13.Substring(REQUEST_str13.IndexOf("group.add(createPlacemark(new YMaps.GeoPoint("), REQUEST_str13.IndexOf("map.addOverlay(group);") - REQUEST_str13.IndexOf("group.add(createPlacemark(new YMaps.GeoPoint("));
                        else //чтобы мусор не попадал, в строки данных, если запрос ответил, а данных не вернул
                        {
                            dt = new DataTable();
                            break;
                        }
                        //MessageBox.Show("STAGE 1");
                        //-----------------------------
                        //ЗАМЕНИТЬ СОДЕРЖИМОЕ НА ПУСТО МЕЖДУ "group.add" и "<h2>"
                        while (REQUEST_str13.IndexOf("group.add") > -1)//
                        {
                            REQUEST_str13 = REQUEST_str13.Replace(REQUEST_str13.Substring(REQUEST_str13.IndexOf("group.add"), REQUEST_str13.IndexOf("<h2>") - REQUEST_str13.IndexOf("group.add") + 4)/*количество символов "<h2>"*/, "");
                        }

                        //MessageBox.Show("STAGE 2");
                        //-----------------------------
                        // ЗАМЕНИТЬ СОДЕРЖИМОЕ ВСЕХ КОНТЕЙНЕРОВ НА "||||" (КОНТЕЙНЕР ОТКРЫЛСЯ = "<", КОНТЕЙНЕР ЗАКРЫЛСЯ = ">")
                        // ЗАМЕНИТЬ ВСЕ "СИМВОЛЫ ПЕРЕВОДА СТРОКИ"("\r") НА "ПУСТО"("")
                        while (REQUEST_str13.IndexOf(">") > -1 && REQUEST_str13.IndexOf("<") > -1)//
                        {
                            if (REQUEST_str13.IndexOf(">") - REQUEST_str13.IndexOf("<") > 0)
                                REQUEST_str13 = REQUEST_str13.Replace(REQUEST_str13.Substring(REQUEST_str13.IndexOf("<"), REQUEST_str13.IndexOf(">") - REQUEST_str13.IndexOf("<") + 1), "||||").Replace("\t", "").Replace("\n", "").Replace("\r", "|").Replace("&quot;", "");
                        }

                        //MessageBox.Show("STAGE 3");
                        //-----------------------------
                        // ЗАМЕНИТЬ ВСЕ ВХОЖДЕНИЯ "||" НА "|"
                        while (REQUEST_str13.IndexOf("||") > -1)
                            REQUEST_str13 = REQUEST_str13.Replace("||", "|");

                        //MessageBox.Show("STAGE 5");

                        //ДОПОЛНИТЕЛЬНЫЙ РАЗДЕЛИТЕЛЬ СТОЛБЦОВ ИЗ СТОЛБЦА
                        while (REQUEST_str13.IndexOf(", '") > -1)
                            REQUEST_str13 = REQUEST_str13.Replace(", '", "|");

                        //sitestr = sitestr.Replace("&quot;", " ");
                        //-----------------------------
                        // СОЗДАЕМ МАССИВ СТРОК ПО ПРИНЦИПУ "\n"
                        str = Regex.Split(REQUEST_str13, ";");
                        //str = Regex.Split(sitestr, "group.add");

                        //MessageBox.Show("STAGE 6");
                        //-----------------------------

                        //ДОБАВЛЯЕМ СТОЛБЦЫ В ПЕРЕМЕННУЮ ТАБЛИЦЫ
                        dt.Columns.Add("Аптека");        //+
                        dt.Columns.Add("Адрес");         //+
                        dt.Columns.Add("Телефон");       //+
                        dt.Columns.Add("add_4");         //-
                        dt.Columns.Add("add_Адрес");     //-
                        dt.Columns.Add("add_Телефон");   //-
                        dt.Columns.Add("Цена");          //+
                        dt.Columns.Add("Количество");    //-
                        dt.Columns.Add("ID");            //-

                        //ПОСИМВОЛЬНАЯ ОБРАБОТКА КАЖДОЙ СТРОКИ МАССИВА(ДОБАВЛЯЕМ СТОЛБЦЫ ПО ПРИНЦИПУ "\t" (s.Replace("|", "\t")) )
                        foreach (string ss in str)
                        {
                            string s = ss.Trim('|');

                            while (s.IndexOf(" |") > -1) s = s.Replace(" |", "|");
                            while (s.IndexOf("| ") > -1) s = s.Replace("| ", "|");

                            /*
                            int i = 0;
                            for (int j = 0; j < 9; j++)     //j = dt.colums.add.count       //немного недоганяю, что и как делает етот цикл... (.нужно разобратцо) типо зачем то сместить индекс вправо.. типо постобработка по столбцам(например в конкретном столбце заменить чето)
                            {
                                i = s.IndexOf("|", i + 1);
                            }

                            s = s.Substring(i + 1);
                            */

                            s = s.Replace("руб.'", "");
                            s = s.Replace("|", "\t");

                            if (s.IndexOf("\t") > 0)
                                try
                                {
                                    dt.Rows.Add(Regex.Split(s, "\t"));
                                }
                                catch (Exception)
                                {
                                    //MessageBox.Show(Regex.Split(s, "\t").Length.ToString());
                                }
                        }

                        //УДАЛЯЕМ НЕНУЖНЫЕ СТОЛБЦЫ, ДОБАВЛЯЕМ ЕЩЕ СТОЛБЦЫ
                        dt.Columns.Remove("add_4");
                        dt.Columns.Remove("add_Адрес");
                        dt.Columns.Remove("add_Телефон");
                        dt.Columns.Remove("Количество");
                        dt.Columns.Remove("ID");
                        dt.Columns.Add("Товар");
                        dt.Columns.Add("Город");
                        dt.Columns.Add("Дата");
                        dt.Columns.Add("ИД сайта");

                        //ДЛЯ КАЖДОГО КАРТЕЖА ПРИСВАИВАЕМ ЗНАЧЕНИЕ СТОЛБЦОВ
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            //dt.Rows[i]["Товар"] = param.Substring(5, param.IndexOf("&test=test") - 5);//"lekarstvennye-sredstva/abaktal-tbl-p-o-400mg-10";//GET_0(param);
                            //dt.Rows[i]["Товар"] = param.Substring(5, param.IndexOf("&test=test") - 5).Replace("%2F", "/");//"lekarstvennye-sredstva/abaktal-tbl-p-o-400mg-10";//GET_0(param);
                            dt.Rows[i]["Товар"] = "lekarstvennye-sredstva/abaktal-tbl-p-o-400mg-10/";
                            //dt.Rows[i]["Товар"] = drugname;
                            dt.Rows[i]["Город"] = "см. адрес";//cityname;
                            dt.Rows[i]["Дата"] = DateTime.Today.ToString("yyyy-MM-dd");
                            dt.Rows[i]["ИД сайта"] = siteid;
                        }

                        //СОРТИРУЕМ КОЛОНКИ
                        dt.Columns["Товар"].SetOrdinal(0);
                        dt.Columns["Дата"].SetOrdinal(1);
                        dt.Columns["Цена"].SetOrdinal(2);
                        dt.Columns["Город"].SetOrdinal(3);
                        dt.Columns["Аптека"].SetOrdinal(4);
                        dt.Columns["Адрес"].SetOrdinal(5);
                        dt.Columns["ИД сайта"].SetOrdinal(6);

                        //MessageBox.Show("DONE->SUCCES");

                        break;
                        #endregion case13
                    default:
                        //MessageBox.Show("Не определен ID сайта");
                        break;
                }
            }
            catch (Exception)
            {
                //MessageBox.Show(ex.Message);
            }
            return dt;
        }


        private static string GET(string Url, string Data, Encoding en)
        {
            WebRequest req = WebRequest.Create(Url + "?" + Data);
            WebResponse resp = req.GetResponse();
            req.Timeout = 10000;
            Stream stream = resp.GetResponseStream();
            StreamReader sr = new StreamReader(stream, en);
            string Out = sr.ReadToEnd();
            sr.Close();
            req = null;
            return Out;
        }

        //GET ЗАПРОС "REQUEST_URL" + "Encoding"
        private static string GET_0(string Url, Encoding en)
        {
            WebRequest req = WebRequest.Create(Url);
            WebResponse resp = req.GetResponse();
            req.Timeout = 10000;
            Stream stream = resp.GetResponseStream();
            StreamReader sr = new StreamReader(stream, en);
            string Out = sr.ReadToEnd();
            sr.Close();
            req = null;
            return Out;
        }

        //GET ЗАПРОС "REQUEST_URL" + params(специфика движка ID) + "Encoding"       (like "farmani.ru")
        private static string GET_1(string Url, string Data, Encoding en)
        {
            //WebRequest req = WebRequest.Create(Url + "/" + Data.Substring(5, Data.IndexOf("&test=test") - 5).Replace("%2F", "/"));
            WebRequest req = WebRequest.Create("http://farmani.ru/catalog/lekarstvennye-sredstva/abaktal-tbl-p-o-400mg-10/");
            //тут бы лог прописать...
            //MessageBox.Show(Url + '/' + Data.Substring(5, Data.IndexOf("&test=test") - 5).Replace("%2F", "/"));   //(%2F - .заменить на "/" и + .уточнить подстроку (без параметра "&test=test")) ...либо научитцо обрабатывать исключение либо обойти его таким макаром...
            WebResponse resp = req.GetResponse();
            req.Timeout = 10000;
            Stream stream = resp.GetResponseStream();
            StreamReader sr = new StreamReader(stream, en);
            string Out = sr.ReadToEnd();
            sr.Close();
            req = null;
            return Out;
        }

        private static string GET_HTTP(string Url, string Data, Encoding en, string referer)
        {
            string Out = "";
            try
            {
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Url + "?" + Data);
                req.Timeout = 300000;
                req.Referer = referer;
                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                Stream stream = resp.GetResponseStream();
                StreamReader sr = new StreamReader(stream, en);
                Out = sr.ReadToEnd();
                sr.Close();

            }
            catch (Exception)
            {
                Out = "";
            }
            return Out;
        }

        private static string GET_HTTP(string Url, string Data, Encoding en, Cookie[] incook, out Cookie[] outcook)
        {
            string Out = "";
            try
            {
                HttpWebRequest req1 = (HttpWebRequest)WebRequest.Create(Url + "?" + Data);
                req1.CookieContainer = new CookieContainer();

                ////получаем куки
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Url + "?" + Data);
                req.CookieContainer = new CookieContainer();
                req.Timeout = 5000;
                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                Stream responseStream = resp.GetResponseStream();
                incook = new Cookie[0];
                foreach (Cookie c in resp.Cookies)
                {
                    req1.CookieContainer.Add(new Uri(Url), c);
                    Array.Resize(ref incook, incook.Length + 1);
                    incook[incook.Length - 1] = c;
                }
                responseStream.Close();
                req = null;
                ////////////////////

                WebResponse resp1 = req1.GetResponse();
                req1.Timeout = 30000;
                Stream stream = resp1.GetResponseStream();
                StreamReader sr = new StreamReader(stream, en);
                Out = sr.ReadToEnd();
                sr.Close();

                outcook = incook;
            }
            catch (Exception)
            {
                Out = "";
                outcook = incook;
            }
            return Out;
        }

        static string DecodeEncodedNonAsciiCharacters(string value)
        {
            return Regex.Replace(
                value,
                @"\\u(?<Value>[a-zA-Z0-9]{4})",
                m =>
                {
                    return ((char)int.Parse(m.Groups["Value"].Value, NumberStyles.HexNumber)).ToString();
                });
        }

        private static string GET_HTTP_UA(string Url, string Data, Encoding en)
        {
            string Out = "";
            try
            {
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Url + "?" + Data);
                req.Timeout = 300000;

                req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0";

                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                Stream stream = resp.GetResponseStream();
                StreamReader sr = new StreamReader(stream, en);
                Out = sr.ReadToEnd();
                sr.Close();

            }
            catch (Exception)
            {
                Out = "";
            }
            return Out;
        }

        private string POST(string Url, string Data)
        {
            string Out = String.Empty;
            try
            {
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Url);
                req.Method = "POST";
                req.Timeout = 100000;
                req.ContentType = "application/x-www-form-urlencoded";
                byte[] sentData = Encoding.UTF8.GetBytes(Data);
                req.ContentLength = sentData.Length;
                Stream sendStream = req.GetRequestStream();
                sendStream.Write(sentData, 0, sentData.Length);
                sendStream.Close();

                WebResponse res = req.GetResponse();
                Stream ReceiveStream = res.GetResponseStream();
                StreamReader sr = new StreamReader(ReceiveStream, Encoding.UTF8);

                Char[] read = new Char[256];
                int count = sr.Read(read, 0, 256);

                while (count > 0)
                {
                    String str = new String(read, 0, count);
                    Out += str;
                    count = sr.Read(read, 0, 256);
                }
            }
            catch (Exception)
            {
            }
            return Out;
        }
    }
}
